package com.evildog.workspace.life.application.convert;

import com.evildog.workspace.common.result.PagedResult;
import java.util.List;
import com.evildog.workspace.life.application.vo.DiaryTagPageVO;
import com.evildog.workspace.life.application.vo.DiaryTagListVO;
import com.evildog.workspace.life.application.vo.DiaryTagVO;
import com.evildog.workspace.life.application.dto.DiaryTagPageDTO;
import com.evildog.workspace.life.application.dto.DiaryTagListDTO;
import com.evildog.workspace.life.application.dto.DiaryTagDTO;
import com.evildog.workspace.life.application.model.DiaryTagParam;
import com.evildog.workspace.life.application.model.DiaryTagPageParam;
import com.evildog.workspace.life.application.model.DiaryTagListParam;
import com.evildog.workspace.life.application.bo.DiaryTagBO;
import com.evildog.workspace.life.application.bo.DiaryTagPageBO;
import com.evildog.workspace.life.application.bo.DiaryTagListBO;
import com.evildog.workspace.life.application.entity.DiaryTag;
import com.evildog.workspace.life.application.entity.DiaryTagPageDO;
import com.evildog.workspace.life.application.entity.DiaryTagListDO;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Mappings;
import org.mapstruct.factory.Mappers;

@Mapper
public interface DiaryTagConvert {

    DiaryTagConvert INSTANCE = Mappers.getMapper(DiaryTagConvert.class);

    DiaryTagPageDTO convert(DiaryTagPageParam diaryTagPageParam);

    DiaryTagListDTO convert(DiaryTagListParam diaryTagListParam);

    DiaryTagDTO convert(DiaryTagParam diaryTagParam);

    @Mapping(target = "isDeleted", ignore = true)
    DiaryTag convert(DiaryTagDTO diaryTagDTO);

    DiaryTagPageDO convert(DiaryTagPageDTO diaryTagPageDTO);

    DiaryTagVO convert(DiaryTagBO diaryTagBO);

    DiaryTagBO convert(DiaryTag diaryTag);

    List<DiaryTagListBO> convert(List<DiaryTagListDO> diaryTagList);

    List<DiaryTagListVO> convertVoList(List<DiaryTagListBO> diaryTagListBO);

    @Mappings({})
    PagedResult<DiaryTagPageBO> convert(IPage<DiaryTagPageDO> page);

    PagedResult<DiaryTagPageVO> convert(PagedResult<DiaryTagPageBO> page);
}